#pragma once
#include "Message.h"
#include "String.h"

class Session
{
public:
	UserInfo ui;
	AStr DstUri;
	AStr Addr;

	int I;
	int Q;

	DWORD ticks;

	int Status;

	jSocket Sock;

	Message m;
	AStr MsgSent;
	AStr res;

	HANDLE hThread;
	HANDLE hEvent;

	void Init();
	void Init(UserInfo ui);

	Session() { Init(); }
	Session(UserInfo ui) { Init(ui); }

	~Session() {  }

	void Begin(AStr DstUri, AStr msg);
	void Response(AStr InviteMsg);

	void M_RTN(AStr msg);
	void O_RTN(AStr msg);
	//void B_RTN(AStr msg);
	void BN(AStr msg);
	
	void KCB()		//KeepConnectionBusy
	{
		DWORD t = GetTickCount();
		if (t-ticks>1000*120)
		{
			ticks = t;
			MsgSent = m.kcb(ui.fxno,I,++Q);
			Request(MsgSent,m.flag());
		}
	}

	void RTN(AStr msg);

	bool SendMsg(AStr msg);
	AStr Request(AStr r, AStr f);

	static DWORD WINAPI SessionRcv(LPVOID p);

	bool ThreadRcv();
};
